package 简单.模拟;

import java.util.Arrays;

/**
 * 给你一个整数数组 nums ，请你将数组按照每个值的频率 升序 排序。如果有多
 * 个值的频率相同，请你按照数值本身将它们 降序 排序。 
 * 请你返回排序后的数组。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/sort-array-by-increasing-frequency
 */
public class 按照频率将数组升序排序_1636 {

    public static void main(String[] args) {

        System.out.println(Arrays.toString(frequencySort(new int[]{2, 3, 1, 3, 2})));
    }

    public static int[] frequencySort(int[] nums) {
        int[] freq = new int[201];
        Integer[] sortNums = new Integer[nums.length];

        for (int i = 0; i < nums.length; i++) {
            freq[nums[i] + 100]++;
            sortNums[i] = nums[i];
        }

        Arrays.sort(sortNums, (a, b) -> {
            if (freq[a + 100] == freq[b + 100]) {
                return b - a;
            } else if (freq[a + 100] < freq[b + 100]) {
                return -1;
            } else {
                return 1;
            }
        });
        for (int i = 0; i < sortNums.length; i++) {
            nums[i] = sortNums[i];
        }
        return nums;
    }

}
